/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */
package system;


/**
 * <!-- begin-user-doc -->
 * A representation of the model object '<em><b>Reference</b></em>'.
 * <!-- end-user-doc -->
 *
 * <p>
 * The following features are supported:
 * <ul>
 *   <li>{@link system.Reference#getReferencedEntity <em>Referenced Entity</em>}</li>
 *   <li>{@link system.Reference#getMultiplicity <em>Multiplicity</em>}</li>
 *   <li>{@link system.Reference#getCascade <em>Cascade</em>}</li>
 *   <li>{@link system.Reference#getMappedBy <em>Mapped By</em>}</li>
 *   <li>{@link system.Reference#getFetchType <em>Fetch Type</em>}</li>
 *   <li>{@link system.Reference#getJoinColumnName <em>Join Column Name</em>}</li>
 *   <li>{@link system.Reference#getJoinTableName <em>Join Table Name</em>}</li>
 *   <li>{@link system.Reference#getInverseJoinColumnName <em>Inverse Join Column Name</em>}</li>
 * </ul>
 * </p>
 *
 * @see system.SystemPackage#getReference()
 * @model
 * @generated
 */
public interface Reference extends NamedClass {
	/**
	 * Returns the value of the '<em><b>Referenced Entity</b></em>' reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Referenced Entity</em>' reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Referenced Entity</em>' reference.
	 * @see #setReferencedEntity(Entity)
	 * @see system.SystemPackage#getReference_ReferencedEntity()
	 * @model required="true"
	 * @generated
	 */
	Entity getReferencedEntity();

	/**
	 * Sets the value of the '{@link system.Reference#getReferencedEntity <em>Referenced Entity</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Referenced Entity</em>' reference.
	 * @see #getReferencedEntity()
	 * @generated
	 */
	void setReferencedEntity(Entity value);

	/**
	 * Returns the value of the '<em><b>Multiplicity</b></em>' attribute.
	 * The literals are from the enumeration {@link system.Multiplicity}.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Multiplicity</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Multiplicity</em>' attribute.
	 * @see system.Multiplicity
	 * @see #setMultiplicity(Multiplicity)
	 * @see system.SystemPackage#getReference_Multiplicity()
	 * @model
	 * @generated
	 */
	Multiplicity getMultiplicity();

	/**
	 * Sets the value of the '{@link system.Reference#getMultiplicity <em>Multiplicity</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Multiplicity</em>' attribute.
	 * @see system.Multiplicity
	 * @see #getMultiplicity()
	 * @generated
	 */
	void setMultiplicity(Multiplicity value);

	/**
	 * Returns the value of the '<em><b>Cascade</b></em>' attribute.
	 * The literals are from the enumeration {@link system.CascadeOperations}.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Cascade</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Cascade</em>' attribute.
	 * @see system.CascadeOperations
	 * @see #setCascade(CascadeOperations)
	 * @see system.SystemPackage#getReference_Cascade()
	 * @model
	 * @generated
	 */
	CascadeOperations getCascade();

	/**
	 * Sets the value of the '{@link system.Reference#getCascade <em>Cascade</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Cascade</em>' attribute.
	 * @see system.CascadeOperations
	 * @see #getCascade()
	 * @generated
	 */
	void setCascade(CascadeOperations value);

	/**
	 * Returns the value of the '<em><b>Mapped By</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Mapped By</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Mapped By</em>' attribute.
	 * @see #setMappedBy(String)
	 * @see system.SystemPackage#getReference_MappedBy()
	 * @model
	 * @generated
	 */
	String getMappedBy();

	/**
	 * Sets the value of the '{@link system.Reference#getMappedBy <em>Mapped By</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Mapped By</em>' attribute.
	 * @see #getMappedBy()
	 * @generated
	 */
	void setMappedBy(String value);

	/**
	 * Returns the value of the '<em><b>Fetch Type</b></em>' attribute.
	 * The literals are from the enumeration {@link system.FetchType}.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Fetch Type</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Fetch Type</em>' attribute.
	 * @see system.FetchType
	 * @see #setFetchType(FetchType)
	 * @see system.SystemPackage#getReference_FetchType()
	 * @model
	 * @generated
	 */
	FetchType getFetchType();

	/**
	 * Sets the value of the '{@link system.Reference#getFetchType <em>Fetch Type</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Fetch Type</em>' attribute.
	 * @see system.FetchType
	 * @see #getFetchType()
	 * @generated
	 */
	void setFetchType(FetchType value);

	/**
	 * Returns the value of the '<em><b>Join Column Name</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Join Column Name</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Join Column Name</em>' attribute.
	 * @see #setJoinColumnName(String)
	 * @see system.SystemPackage#getReference_JoinColumnName()
	 * @model
	 * @generated
	 */
	String getJoinColumnName();

	/**
	 * Sets the value of the '{@link system.Reference#getJoinColumnName <em>Join Column Name</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Join Column Name</em>' attribute.
	 * @see #getJoinColumnName()
	 * @generated
	 */
	void setJoinColumnName(String value);

	/**
	 * Returns the value of the '<em><b>Join Table Name</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Join Table Name</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Join Table Name</em>' attribute.
	 * @see #setJoinTableName(String)
	 * @see system.SystemPackage#getReference_JoinTableName()
	 * @model
	 * @generated
	 */
	String getJoinTableName();

	/**
	 * Sets the value of the '{@link system.Reference#getJoinTableName <em>Join Table Name</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Join Table Name</em>' attribute.
	 * @see #getJoinTableName()
	 * @generated
	 */
	void setJoinTableName(String value);

	/**
	 * Returns the value of the '<em><b>Inverse Join Column Name</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Inverse Join Column Name</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Inverse Join Column Name</em>' attribute.
	 * @see #setInverseJoinColumnName(String)
	 * @see system.SystemPackage#getReference_InverseJoinColumnName()
	 * @model
	 * @generated
	 */
	String getInverseJoinColumnName();

	/**
	 * Sets the value of the '{@link system.Reference#getInverseJoinColumnName <em>Inverse Join Column Name</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Inverse Join Column Name</em>' attribute.
	 * @see #getInverseJoinColumnName()
	 * @generated
	 */
	void setInverseJoinColumnName(String value);

} // Reference
